home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / MATH / CMPLXNUM / CMPLXNUM.INC
Text File  |  1989-08-02  |  2KB  |  71 lines

  1. { Pascal INCLUDE file to implement complex math - by Paul McGinnis }
  2. { Address information: 5151 McFadden Avenue                        }
  3. {                      Huntington Beach, CA  92649-1236            }
  4. {                      CompuServe: 76056, 201                      }
  5. {                      GEnie: EXP.ENG-                             }
  6. {                      Internet: TRADER@cup.portal.com             }
  7. {                                                                  }
  8. { This file provides some basic complex math functions and defines }
  9. { a complex data type. A complex number is of the type (a + jb)    }
  10. { where j (or i if you are not an engineer) is the square root of  }
  11. { -1. This was designed as a generic Pascal INCLUDE file and has   }
  12. { been tested on Turbo Pascal(Mac) & VAX Pascal.                   }
  13.  
  14. TYPE
  15.   cmplx = RECORD
  16.             Re : REAL;    { x.Re = the real part of x }
  17.             Im : REAL;    { x.Im = the imaginary part of x }
  18.           END;
  19.  
  20.  
  21. PROCEDURE CXADD(c1, c2 : cmplx; VAR c3 : cmplx);    { c3 = c1 + c2 }
  22.  
  23. BEGIN
  24.   c3.Re := c1.Re + c2.Re;
  25.   c3.Im := c1.Im + c2.Im;
  26. END;  
  27.  
  28.  
  29.  
  30. PROCEDURE CXSUB(c1, c2 : cmplx; VAR c3 : cmplx);    { c3 = c1 - c2 }
  31.  
  32. BEGIN
  33.   c3.Re := c1.Re - c2.Re;
  34.   c3.Im := c1.Im - c2.Im;
  35. END;  
  36.  
  37.  
  38.  
  39. PROCEDURE CXMUL(c1, c2 : cmplx; VAR c3 : cmplx);    { c3 = c1 * c2 }
  40.  
  41. BEGIN
  42.   c3.Re := (c1.Re * c2.Re) - (c1.Im * c2.Im);
  43.   c3.Im := (c1.Re * c2.Im) + (c1.Im * c2.Re);
  44. END;
  45.  
  46.  
  47.  
  48. PROCEDURE CXDIV(c1, c2 : cmplx; VAR c3 : cmplx);    { c3 = c1 / c2 }
  49.  
  50. VAR
  51.   denom : REAL;
  52.   
  53. BEGIN
  54.   denom := (c2.Re * c2.Re) + (c2.Im * c2.Im);
  55.   c3.Re := ((c1.Re * c2.Re) + (c1.Im * c2.Im)) / denom;
  56.   c3.Im := ((c1.Im * c2.Re) - (c1.Re * c2.Im)) / denom;
  57. END;
  58.  
  59.  
  60.  
  61. PROCEDURE CXINV(c1 : cmplx; VAR c2 : cmplx);        { c2 = 1 / c1 }
  62.  
  63. VAR
  64.   denom : REAL;
  65.   
  66. BEGIN
  67.   denom := (c1.Re * c1.Re) + (c1.Im * c1.Im);
  68.   c2.Re := c1.Re / denom;
  69.   c2.Im := (-1.0 * c1.Im) / denom;
  70. END;